package buffbuildergui;

import java.util.ArrayList;

public class Entity {
    String name;
    EntityPanel ownerPanel;
    int instant = 0;
    int periodic = 0;
    int over = 0;
    int modifiers = 0;
    int bools = 0;
    int finishers = 0;
    ArrayList<Property> props = new ArrayList<>();
    public Entity() {
        super();
    }
    public void glueToPanel(EntityPanel ep) {
        ownerPanel = ep;
    }
    void doubleLevels(ArrayList<Property> al) {
        Property q;
        al.add(q=new Property("Level:0",Property.DOUBLE,this));
        al.add(q=new Property("Level:1",Property.DOUBLE,this));
        al.add(q=new Property("Level:2",Property.DOUBLE,this));
        al.add(q=new Property("Level:3",Property.DOUBLE,this));
    }
    
    void numWeaponClasses(ArrayList<Property> al) {
        ArrayList<String> temp = new ArrayList<>();
        ArrayList<String> temp0 = new ArrayList<>();
        ArrayList<Property> al0 = new ArrayList<>();
        ArrayList<Property> al1 = new ArrayList<>();
        Property q;
        Property r;
        Property s;
        
        temp0 = new ArrayList<>();
        temp0.add("0");
        temp0.add("1");
        temp0.add("2");
        temp0.add("3");
        temp0.add("4");
        temp0.add("5");
        temp0.add("6");
        al.add(q=new Property("numWeaponClasses",Property.FINITE,temp0,this));
            al0 = new ArrayList<>();
            q.plugs.add(al0);
            al0 = new ArrayList<>();
            q.plugs.add(al0);
                al0.add(r=new Property("weaponClassForWeaponPassive",Property.QUOTED,this));
            al0 = new ArrayList<>();
            q.plugs.add(al0);
                al0.add(r=new Property("weaponClassForWeaponPassive",Property.QUOTED,this));
                al0.add(r=new Property("weaponClassForWeaponPassive",Property.QUOTED,this));
            al0 = new ArrayList<>();
            q.plugs.add(al0);
                al0.add(r=new Property("weaponClassForWeaponPassive",Property.QUOTED,this));
                al0.add(r=new Property("weaponClassForWeaponPassive",Property.QUOTED,this));
                al0.add(r=new Property("weaponClassForWeaponPassive",Property.QUOTED,this));
            al0 = new ArrayList<>();
            q.plugs.add(al0);
                al0.add(r=new Property("weaponClassForWeaponPassive",Property.QUOTED,this));
                al0.add(r=new Property("weaponClassForWeaponPassive",Property.QUOTED,this));
                al0.add(r=new Property("weaponClassForWeaponPassive",Property.QUOTED,this));
                al0.add(r=new Property("weaponClassForWeaponPassive",Property.QUOTED,this));
            al0 = new ArrayList<>();
            q.plugs.add(al0);
                al0.add(r=new Property("weaponClassForWeaponPassive",Property.QUOTED,this));
                al0.add(r=new Property("weaponClassForWeaponPassive",Property.QUOTED,this));
                al0.add(r=new Property("weaponClassForWeaponPassive",Property.QUOTED,this));
                al0.add(r=new Property("weaponClassForWeaponPassive",Property.QUOTED,this));
                al0.add(r=new Property("weaponClassForWeaponPassive",Property.QUOTED,this));
            al0 = new ArrayList<>();
            q.plugs.add(al0);
                al0.add(r=new Property("weaponClassForWeaponPassive",Property.QUOTED,this));
                al0.add(r=new Property("weaponClassForWeaponPassive",Property.QUOTED,this));
                al0.add(r=new Property("weaponClassForWeaponPassive",Property.QUOTED,this));
                al0.add(r=new Property("weaponClassForWeaponPassive",Property.QUOTED,this));
                al0.add(r=new Property("weaponClassForWeaponPassive",Property.QUOTED,this));
                al0.add(r=new Property("weaponClassForWeaponPassive",Property.QUOTED,this));
    }

    void instantActionTriggerType(ArrayList<Property> al) {
        ArrayList<String> temp = new ArrayList<>();
        ArrayList<String> temp0 = new ArrayList<>();
        ArrayList<Property> al0 = new ArrayList<>();
        ArrayList<Property> al1 = new ArrayList<>();
        Property q;
        Property r;
        Property s;
        temp.add("\"OnDelay\"");
        temp.add("\"AlwaysPerform\"");
        temp.add("\"OnCondition\"");
        temp.add("\"OnHyperspaceExit\"");
        al.add(q=new Property("instantActionTriggerType",Property.FINITE,temp,this));
            al0 = new ArrayList<Property>();
            q.plugs.add(al0);
                al0.add(r=new Property("delayTime",Property.DOUBLE,this));
            al0 = new ArrayList<Property>();
            q.plugs.add(al0);
            al0 = new ArrayList<Property>();
            q.plugs.add(al0);
                temp0 = new ArrayList<>();
                temp0.add("\"IfOwnerHasBuff\"");
                temp0.add("\"IfOwnerDoesNotHaveBuff\"");
                temp0.add("\"IfFirstSpawnerHasBuff\"");
                temp0.add("\"IfFirstSpawnerDoesNotHaveBuff\"");
                temp0.add("\"IfOwnerIsAboutToDie\"");
                temp0.add("\"IfOwnerHasDestabilizationProtection\"");
                temp0.add("\"IfOwnerDoesNotHaveDestabilizaitonProtection\"");
                temp0.add("\"IfOwnerHasHullLessThanPerc\"");
                al0.add(r=new Property("instantActionConditionType",Property.FINITE,temp0,this));
                    al1 = new ArrayList<Property>();
                    r.plugs.add(al1);
                        al1.add(s=new Property("conditionBuffType",Property.BUFF,this));
                        al1.add(s=new Property("conditionBuffShortName",Property.QUOTED,this));
                    al1 = new ArrayList<Property>();
                    r.plugs.add(al1);
                        al1.add(s=new Property("conditionBuffType",Property.BUFF,this));
                        al1.add(s=new Property("conditionBuffShortName",Property.QUOTED,this));
                    al1 = new ArrayList<Property>();
                    r.plugs.add(al1);
                        al1.add(s=new Property("conditionBuffType",Property.BUFF,this));
                        al1.add(s=new Property("conditionBuffShortName",Property.QUOTED,this));
                    al1 = new ArrayList<Property>();
                    r.plugs.add(al1);
                        al1.add(s=new Property("3conditionBuffType",Property.BUFF,this));
                        al1.add(s=new Property("conditionBuffShortName",Property.QUOTED,this));
                    al1 = new ArrayList<Property>();
                    r.plugs.add(al1);
                    al1 = new ArrayList<Property>();
                    r.plugs.add(al1);
                    al1 = new ArrayList<Property>();
                    r.plugs.add(al1);
                    al1 = new ArrayList<Property>();
                    r.plugs.add(al1);
                        al1.add(s=new Property("hullPerc",Property.VOID,this));
                        doubleLevels(al1);
            al0 = new ArrayList<Property>();
            q.plugs.add(al0);
    }

    void targetFilter(ArrayList<Property> al) {
        ArrayList<String> temp = new ArrayList<>();
        ArrayList<String> temp0 = new ArrayList<>();
        ArrayList<Property> al0 = new ArrayList<>();
        ArrayList<Property> al1 = new ArrayList<>();
        Property q;
        Property r;
        Property s;
        
        al.add(q=new Property("targetFilter",Property.VOID,this));
        temp = new ArrayList<>();
        temp.add("0");
        temp.add("1");
        temp.add("2");
        temp.add("3");
        al.add(q=new Property("numOwnerships",Property.FINITE,temp,this));
            al0 = new ArrayList<Property>();
            q.plugs.add(al0);
            temp0 = new ArrayList<>();
            temp0.add("\"Player\"");
            temp0.add("\"Friendly\"");
            temp0.add("\"Enemy\"");
            temp0.add("\"NoOwner\"");
            al0 = new ArrayList<Property>();
            q.plugs.add(al0);
                al0.add(r=new Property("ownership",Property.FINITE,temp0,this));
            al0 = new ArrayList<Property>();
            q.plugs.add(al0);
                al0.add(r=new Property("ownership",Property.FINITE,temp0,this));
                al0.add(r=new Property("ownership",Property.FINITE,temp0,this));
            al0 = new ArrayList<Property>();
            q.plugs.add(al0);
                al0.add(r=new Property("ownership",Property.FINITE,temp0,this));
                al0.add(r=new Property("ownership",Property.FINITE,temp0,this));
                al0.add(r=new Property("ownership",Property.FINITE,temp0,this));
        temp = new ArrayList<>();
        temp.add("0");
        temp.add("1");
        temp.add("2");
        temp.add("3");
        temp.add("4");
        temp.add("5");
        temp.add("6");
        al.add(q=new Property("numObjects",Property.FINITE,temp,this));
            al0 = new ArrayList<Property>();
            q.plugs.add(al0);
            temp0 = new ArrayList<>();
            temp0.add("\"Fighter\"");
            temp0.add("\"Corvette\"");
            temp0.add("\"Frigate\"");
            temp0.add("\"Capitalship\"");
            temp0.add("\"Titan\"");
            temp0.add("\"PlanetModule\"");
            temp0.add("\"StarBase\"");
            temp0.add("\"Planet\"");
            al0 = new ArrayList<>();
            q.plugs.add(al0);
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
            al0 = new ArrayList<>();
            q.plugs.add(al0);
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
            al0 = new ArrayList<>();
            q.plugs.add(al0);
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
            al0 = new ArrayList<>();
            q.plugs.add(al0);
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
            al0 = new ArrayList<>();
            q.plugs.add(al0);
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
            al0 = new ArrayList<>();
            q.plugs.add(al0);
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
            al0 = new ArrayList<>();
            q.plugs.add(al0);
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
                al0.add(r=new Property("object",Property.FINITE,temp0,this));
        temp = new ArrayList<>();
        temp.add("0");
        temp.add("1");
        al.add(q=new Property("numSpaces",Property.FINITE,temp,this));
            al0 = new ArrayList<Property>();
            q.plugs.add(al0);
            temp0 = new ArrayList<>();
            temp0.add("\"Normal\"");
            temp0.add("\"Phase\"");
            al0 = new ArrayList<Property>();
            q.plugs.add(al0);
                al0.add(r=new Property("space",Property.FINITE,temp0,this));
        temp = new ArrayList<>();
        temp.add("0");
        temp.add("1");
        temp.add("2");
        temp.add("3");
        temp.add("4");
        temp.add("5");
        temp.add("6");
        temp.add("7");
        temp.add("8");
        temp.add("9");
        al.add(q=new Property("numConstraints",Property.FINITE,temp,this));
            al0 = new ArrayList<Property>();
            q.plugs.add(al0);
            temp0 = new ArrayList<>();
            temp0.add("CanBeCaptured");
            temp0.add("CanBeJumpBlocked");
            temp0.add("CanHaveFighters");
            temp0.add("CanHaveShields");
            temp0.add("CanPhaseDodge");
            temp0.add("CanSpreadWeaponDamage");
            temp0.add("HasAntiMatterPool");
            temp0.add("HasAntiMatterShortage");
            temp0.add("HasEnergyWeapons");
            temp0.add("HasHullDamage");
            temp0.add("HasPhaseMissiles");
            temp0.add("HasPopulation");
            temp0.add("HasShieldDamage");
            temp0.add("HasWeapons");
            temp0.add("IsCargoShip");
            temp0.add("IsColonizable");
            temp0.add("IsExplored");
            temp0.add("IsMovingToLocalOrbitBody");
            temp0.add("IsPsy");
            temp0.add("LinkedCargoShip");
            temp0.add("LinkedSquad");
            temp0.add("ModuleUnderConstruction");
            temp0.add("NotSelf");
            temp0.add("WithinSolarSystem");
            temp0.add("NotActivelyBeingConstructed");
            al0 = new ArrayList<>();
            q.plugs.add(al0);
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
            al0 = new ArrayList<>();
            q.plugs.add(al0);
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
            al0 = new ArrayList<>();
            q.plugs.add(al0);
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
            al0 = new ArrayList<>();
            q.plugs.add(al0);
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
            al0 = new ArrayList<>();
            q.plugs.add(al0);
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
            al0 = new ArrayList<>();
            q.plugs.add(al0);
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
            al0 = new ArrayList<>();
            q.plugs.add(al0);
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
            al0 = new ArrayList<>();
            q.plugs.add(al0);
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
            al0 = new ArrayList<>();
            q.plugs.add(al0);
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
                al0.add(r=new Property("constraint",Property.FINITE,temp0,this));
    }
    
    void range(ArrayList<Property> al) {
        Property q;
        al.add(q = new Property("range",Property.VOID,this));
        doubleLevels(al);
    }
    
    void maxTargetCount(ArrayList<Property> al) {
        Property q;
        al.add(q = new Property("maxTargetCount",Property.VOID,this));
        doubleLevels(al);
    }
    
    void maxNumTargets(ArrayList<Property> al) {
        Property q;
        al.add(q = new Property("maxNumTargets",Property.VOID,this));
        doubleLevels(al);
    }
    
    void hasWeaponEffects(ArrayList<Property> al) {
        ArrayList<String> temp = new ArrayList<>();
        ArrayList<String> temp0 = new ArrayList<>();
        ArrayList<String> temp1 = new ArrayList<>();
        ArrayList<String> temp2 = new ArrayList<>();
        ArrayList<Property> al0 = new ArrayList<>();
        ArrayList<Property> al1 = new ArrayList<>();
        ArrayList<Property> al2 = new ArrayList<>();
        Property q;
        Property r;
        Property s;
        Property t;
        
        temp0 = new ArrayList<>();
        temp0.add("TRUE");
        temp0.add("FALSE");
        al.add(q=new Property("hasWeaponEffects",Property.FINITE,temp0,this));
            al0 = new ArrayList<Property>();
            q.plugs.add(al0);
            temp1 = new ArrayList<>();
            temp1.add("Target");
            temp1.add("Targeter");
            al0.add(r=new Property("weaponEffectOriginType",Property.FINITE,temp1,this));
                al1 = new ArrayList<>();
                r.plugs.add(al1);
                    al1.add(s=new Property("targetCentricEffectPointSPawnInfo",Property.VOID,this));
                    temp2 = new ArrayList<>();
                    temp2.add("CompletelyRandom");
                    al1.add(s=new Property("spawnType",Property.FINITE,temp2,this));
                        al2=new ArrayList<>();
                        s.plugs.add(al2);
                    al1.add(s=new Property("minRadius",Property.DOUBLE,this));
                    al1.add(s=new Property("maxRadius",Property.DOUBLE,this));
                al1 = new ArrayList<>();
                r.plugs.add(al1);
                    al1.add(s=new Property("weaponEffectAttachInfo",Property.VOID,this));
                    attachType(al1);
        temp1 = new ArrayList<>();
        temp1.add("CenterOffsetBySpatialRadius");
        al0.add(r=new Property("weaponEffectImpactOffsetType",Property.FINITE,temp1,this));
            al1=new ArrayList<>();
            r.plugs.add(al1);
        al0.add(r=new Property("canWeaponEffectHitHull",Property.BOOLEAN,this));
        al0.add(r=new Property("canWeaponEffectHitShields",Property.BOOLEAN,this));
        weaponEffectsDef(al0);
    }
    
    void weaponEffectsDef(ArrayList<Property> al) {
        Property p,q,r,s,t;
        ArrayList<String> temp,temp0,temp1,temp2;
        ArrayList<Property> al0,al1,al2,al3;
        
        al.add(p=new Property("weaponEffectsDef",Property.VOID,this));
        temp=new ArrayList<>();
        temp.add("Beam");
        temp.add("Missile");
        temp.add("Projectile");
        al.add(p=new Property("weaponType",Property.FINITE,temp,this));
            al0=new ArrayList<>();
            p.plugs.add(al0);
                muzzleAndHitEffects(al0);
                al0.add(q=new Property("beamGlowTextureName",Property.QUOTED,this));
                al0.add(q=new Property("beamCoreTextureName",Property.QUOTED,this));
                al0.add(q=new Property("beamWidth",Property.DOUBLE,this));
                al0.add(q=new Property("beamGlowColor",Property.COLOR,this));
                al0.add(q=new Property("beamCoreColor",Property.COLOR,this));
                al0.add(q=new Property("beamTilingRate",Property.DOUBLE,this));
            al0=new ArrayList<>();
            p.plugs.add(al0);
                muzzleAndHitEffects(al0);
                al0.add(q=new Property("missileTravelEffectName",Property.QUOTED,this));
                al0.add(q=new Property("missileStartTurningDistance",Property.DOUBLE,this));
                al0.add(q=new Property("missileSlowTurnRate",Property.DOUBLE,this));
                al0.add(q=new Property("missileMaxSlowTurnTime",Property.DOUBLE,this));
            al0=new ArrayList<>();
            p.plugs.add(al0);
                muzzleAndHitEffects(al0);
                al0.add(q=new Property("projectileTravelEffectName",Property.QUOTED,this));
    }
    void muzzleAndHitEffects(ArrayList<Property> al) {
        Property p,q,r,s,t;
        ArrayList<String> temp,temp0,temp1,temp2;
        ArrayList<Property> al0,al1,al2,al3;
        
        al.add(p=new Property("burstCount",Property.INTEGER,this));
        al.add(p=new Property("burstDelay",Property.DOUBLE,this));
        al.add(p=new Property("fireDelay",Property.DOUBLE,this));
        al.add(p=new Property("muzzleEffectName",Property.QUOTED,this));
        al.add(p=new Property("muzzleSoundMinRespawnTime",Property.DOUBLE,this));
        al.add(p=new Property("muzzleSounds",Property.VOID,this));
        sounds(al);
        al.add(p=new Property("hitEffectName",Property.QUOTED,this));
        al.add(p=new Property("hitHullEffectSounds",Property.VOID,this));
        sounds(al);
        al.add(p=new Property("hitShieldsEffectSounds",Property.VOID,this));
        sounds(al);
    }
    
    void sounds(ArrayList<Property> al) {
        Property p,q,r,s,t;
        ArrayList<String> temp,temp0,temp1,temp2;
        ArrayList<Property> al0,al1,al2,al3;
        
        temp=new ArrayList<>();
        temp.add("0");
        temp.add("1");
        temp.add("2");
        temp.add("3");
        temp.add("4");
        al.add(p=new Property("soundCount",Property.FINITE,temp,this));
            al0=new ArrayList<>();
            p.plugs.add(al0);
            al0=new ArrayList<>();
            p.plugs.add(al0);
                al0.add(q=new Property("sound",Property.QUOTED,this));
            al0=new ArrayList<>();
            p.plugs.add(al0);
                al0.add(q=new Property("sound",Property.QUOTED,this));
                al0.add(q=new Property("sound",Property.QUOTED,this));
            al0=new ArrayList<>();
            p.plugs.add(al0);
                al0.add(q=new Property("sound",Property.QUOTED,this));
                al0.add(q=new Property("sound",Property.QUOTED,this));
                al0.add(q=new Property("sound",Property.QUOTED,this));
            al0=new ArrayList<>();
            p.plugs.add(al0);
                al0.add(q=new Property("sound",Property.QUOTED,this));
                al0.add(q=new Property("sound",Property.QUOTED,this));
                al0.add(q=new Property("sound",Property.QUOTED,this));
                al0.add(q=new Property("sound",Property.QUOTED,this));
        al.add(p=new Property("hitEffectName",Property.QUOTED,this));
    }
    
    void spawnShips(ArrayList<Property> al) {
        ArrayList<String> temp = new ArrayList<>();
        ArrayList<String> temp0 = new ArrayList<>();
        ArrayList<Property> al0 = new ArrayList<>();
        ArrayList<Property> al1 = new ArrayList<>();
        Property q;
        Property r;
        Property s;
        
        temp = new ArrayList<>();
        temp.add("1");
        al.add(q=new Property("spawnShipsLevelCount",Property.FINITE,temp,this));
        al.add(q=new Property("spawnShips",Property.VOID,this));
        al.add(q=new Property("minFleetPoints",Property.DOUBLE,this));
        al.add(q=new Property("maxFleetPoints",Property.DOUBLE,this));
        temp = new ArrayList<>();
        temp.add("0");
        al.add(q=new Property("requiredShipCount",Property.FINITE,temp,this));
        temp = new ArrayList<>();
        temp.add("0");
        temp.add("1");
        temp.add("2");
        temp.add("3");
        temp.add("4");
        temp.add("5");
        al.add(q=new Property("randomShipCount",Property.FINITE,temp,this));
            al0 = new ArrayList<Property>();
            q.plugs.add(al0);
            al0 = new ArrayList<Property>();
            q.plugs.add(al0);
                al0.add(r=new Property("randomShip",Property.VOID,this));
                al0.add(r=new Property("type",Property.QUOTED,this));
                al0.add(r=new Property("weight",Property.INTEGER,this));
            al0 = new ArrayList<Property>();
            q.plugs.add(al0);
                al0.add(r=new Property("randomShip",Property.VOID,this));
                al0.add(r=new Property("type",Property.QUOTED,this));
                al0.add(r=new Property("weight",Property.INTEGER,this));
                al0.add(r=new Property("randomShip",Property.VOID,this));
                al0.add(r=new Property("type",Property.QUOTED,this));
                al0.add(r=new Property("weight",Property.INTEGER,this));
            al0 = new ArrayList<Property>();
            q.plugs.add(al0);
                al0.add(r=new Property("randomShip",Property.VOID,this));
                al0.add(r=new Property("type",Property.QUOTED,this));
                al0.add(r=new Property("weight",Property.INTEGER,this));
                al0.add(r=new Property("randomShip",Property.VOID,this));
                al0.add(r=new Property("type",Property.QUOTED,this));
                al0.add(r=new Property("weight",Property.INTEGER,this));
                al0.add(r=new Property("randomShip",Property.VOID,this));
                al0.add(r=new Property("type",Property.QUOTED,this));
                al0.add(r=new Property("weight",Property.INTEGER,this));
            al0 = new ArrayList<Property>();
            q.plugs.add(al0);
                al0.add(r=new Property("randomShip",Property.VOID,this));
                al0.add(r=new Property("type",Property.QUOTED,this));
                al0.add(r=new Property("weight",Property.INTEGER,this));
                al0.add(r=new Property("randomShip",Property.VOID,this));
                al0.add(r=new Property("type",Property.QUOTED,this));
                al0.add(r=new Property("weight",Property.INTEGER,this));
                al0.add(r=new Property("randomShip",Property.VOID,this));
                al0.add(r=new Property("type",Property.QUOTED,this));
                al0.add(r=new Property("weight",Property.INTEGER,this));
                al0.add(r=new Property("randomShip",Property.VOID,this));
                al0.add(r=new Property("type",Property.QUOTED,this));
                al0.add(r=new Property("weight",Property.INTEGER,this));
            al0 = new ArrayList<Property>();
            q.plugs.add(al0);
                al0.add(r=new Property("randomShip",Property.VOID,this));
                al0.add(r=new Property("type",Property.QUOTED,this));
                al0.add(r=new Property("weight",Property.INTEGER,this));
                al0.add(r=new Property("randomShip",Property.VOID,this));
                al0.add(r=new Property("type",Property.QUOTED,this));
                al0.add(r=new Property("weight",Property.INTEGER,this));
                al0.add(r=new Property("randomShip",Property.VOID,this));
                al0.add(r=new Property("type",Property.QUOTED,this));
                al0.add(r=new Property("weight",Property.INTEGER,this));
                al0.add(r=new Property("randomShip",Property.VOID,this));
                al0.add(r=new Property("type",Property.QUOTED,this));
                al0.add(r=new Property("weight",Property.INTEGER,this));
                al0.add(r=new Property("randomShip",Property.VOID,this));
                al0.add(r=new Property("type",Property.QUOTED,this));
                al0.add(r=new Property("weight",Property.INTEGER,this));
    }
    
    void effectInfo(ArrayList<Property> al) {
        ArrayList<String> temp = new ArrayList<>();
        ArrayList<String> temp0 = new ArrayList<>();
        ArrayList<Property> al0 = new ArrayList<>();
        ArrayList<Property> al1 = new ArrayList<>();
        Property q;
        Property r;
        Property s;
        
        al.add(q=new Property("effectInfo",Property.VOID,this));
        effectAttachInfo(al);
    }
    
    void effectAttachInfo(ArrayList<Property> al) {
        ArrayList<String> temp = new ArrayList<>();
        Property q;
        al.add(q=new Property("effectAttachInfo",Property.VOID,this));
        attachType(al);
        al.add(q=new Property("smallEffectName",Property.QUOTED,this));
        al.add(q=new Property("mediumEffectName",Property.QUOTED,this));
        al.add(q=new Property("largeEffectName",Property.QUOTED,this));
        al.add(q=new Property("soundID",Property.QUOTED,this));
    }
    
    void attachType(ArrayList<Property> al) {
        ArrayList<String> temp = new ArrayList<>(),temp0;
        Property q,r;
        ArrayList<Property> al0;
        temp = new ArrayList<>();
        temp.add("\"Above\"");
        temp.add("\"Aura\"");
        temp.add("\"Ability\"");
        al.add(q=new Property("attachType",Property.FINITE,temp,this));
            al0 = new ArrayList<>();
            q.plugs.add(al0);
            al0 = new ArrayList<>();
            q.plugs.add(al0);
            al0 = new ArrayList<>();
            q.plugs.add(al0);
            al0.add(r=new Property("abilityIndex",Property.INTEGER,this));
    }
}
